#!/usr/bin/env python
#-*-coding: utf-8-*-

import sys
import xlrd
import bd_module_2


##
# metodo que verifica o ficheiro fornecido tem a extenção correcta
# tenta abrir o ficheiro e se conseguir tenta converter o 
#conteudo para UTF-8
##
def abrir_ler_dados( nome_ficheiro, nome_bd):
    '''
    Abrir um ficheiro do excel utilizando o 
    modulo de leitura de ficheiros excel em python, xlrd
        nome_ficheiro - nome do ficheiro a abrir (caminho relativo ou absoluto )
    '''        
    livro = None
    if (not (nome_ficheiro[-4:] == '.xls')):
        print 'WRONG FILE GIVEN!'
        return
    else:
        try:
            livro = xlrd.open_workbook(nome_ficheiro)
        except:
            print "ERROR OPENING '{0}'".format(nome_ficheiro)
            return
        else:
            
            nome_bd = bd_module_2.operacoes_bd(nome_bd)
            
            conn = bd_module_2.ligar_a_bd(nome_bd)
            cursor = conn.cursor()
            
            sql_stmt = 'INSERT INTO Tabela_1_1 (sexo, inscritos, ano) VALUES(?,?,?)'
            
            for npag in range(2, livro.nsheets):
                pag_dados = livro.sheet_by_index(npag)
                pag_dados = utf_8_encoder(cursor, pag_dados)
                bd_module_2.preencher_tabelas(pag_dados, cursor, sql_stmt)
                bd_module_2.guardar_desligar_bd(conn, cursor)
                break
##                for k in range(pag.nrows):                    
##                    utf_8_encoder(pag.row_values(k))
##                pass                
            pass
                
        pass
    pass
pass


##
#codificando os dados
def utf_8_encoder(cursor, folha):
    '''codifica a informação em utf8 e retorna-os numa lista'''

    tmp_lst = []
    lst_dados = []
    coln_values = folha.col_values(0)
    for valor in range(3, len(coln_values)):
        # Linhas a ignorar nas pesquisas
        if(coln_values[valor] == 'Total'):
            continue
        if(coln_values[valor] == 'TOTAL'): 
            break
        else:
            tmp_lst.append(coln_values[valor])
        pass
    pass
    
    lin = 2
    for index in range(len(tmp_lst)):
        lin +=1                             #os dados nas linha comecam sempre na linha 2
        for col in range(1,folha.ncols):
            if (not folha.cell_value(lin, col) == ''):
                lst_dados.append((tmp_lst[index], folha.cell_value(lin, col), folha.cell_value(2, col)))
            pass
        pass
    pass
    return lst_dados
pass
    
    
    
#codificando os dados
def utf_8_encoder1(lista):
    '''codifica a informação em utf8 e retorna-os numa lista'''
    for obj in lista:
        yield obj.encode("utf8")
    pass
pass


##
# metodo que recebe um endereco para a base de dados e os dados a guardar
# cria as tabelas apartir da lista de dados
# e salva para o disco
##
def criarBD_guardar_dados(endereco, dados):
    '''
    Verifica o endereço fornecido, cria a base de dados e as tabelas
    e com o modulo bd_module guarda os dados no disco
        endereco - caminho completo ou nome da base de dados a criar  
        dados - lista de dados a guardar no disco
    '''
    bd_module.criar_base_dados(endereco)
    
pass
    
    
    
    

if __name__ == "__main__":
    def usage():
        text = """
        usage:
            no ambiente python:
                lp1213-4708.py nF.xls[x] cN_bd[.ext]
            fora do ambiente python:
                python lp1213-4708.py nF.xls[x] cN_bd[.ext]
            
            nF.xls[x] -> nome do ficheiro no formato excel
            cN_bd[.ext] -> nome ou caminho (incluido extensão)
                        do ficheiro para base de dados
        """
        
        sys.stdout.write(text)
    pass
    
    if len(sys.argv) < 3:
        usage()
        sys.exit(0)
    pass
    
    if len(sys.argv) == 3:
        print
        abrir_ler_dados(sys.argv[1], sys.argv[2])
    else:
         if len(sys.argv) == 3:
            abrir_ler_dados(sys.argv[2])